<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>FileAppend</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>FileAppend</h1>

<p>在文件末尾处追加文本 (如果有必要, 首先创建文本).</p>

<pre class="Syntax">FileAppend [, Text, Filename, Encoding]</pre>
<h3>参数</h3>
<table class="info">
  <tr>
    <td width="15%">Text</td>
    <td width="85%"><p>要追加到文件的文本. 此文本可以包含换行符 (`n) 来开始新行. 此外，可以使用 <a href="../Scripts.htm#continuation">字串分段</a> 的方法把单一的长行分成较短的几行.</p>
      <p>如果 <em>Text</em> 为空, 则创建一个文件名为 <em>Filename</em> 的空白文件 (但如果文件已经存在, 则更新其修改时间).</p>
    <p>如果 <em>Text</em> 为 <a href="../misc/Clipboard.htm#ClipboardAll">%ClipboardAll%</a> 或之前赋值了 ClipboardAll 内容的变量, 则 <em>Filename</em> 将被剪贴板的全部内容无条件覆盖 (即 不需要使用 <a href="FileDelete.htm">FileDelete</a>).</p></td>
  </tr>
  <tr>
    <td>Filename</td>
    <td><p>需追加内容的文件的名称, 如果没有指定绝对路径则假定在 <a href="../Variables.htm#WorkingDir">A_WorkingDir</a> 中.</p>
    <p><strong>二进制模式</strong>: 要以二进制模式而不是文本模式追加, 在文件名前面加上星号. 这使得每个换行符 (`n) 作为单个换行符 (LF) 而不是 Windows 标准的 CR+LF 写入. 例如: *C:\My Unix File.txt</p>
    <p>如果文件还没有打开 (因为在 <a href="LoopReadFile.htm">文件读取循环</a> 中), 如果 <em>Text</em> 包含任一回车和换行符对 (`r`n) 时文件被自动以二进制模式打开. 换句话说, 前面段落描述的星号选项自动生效. 不过, 当 <em>Text</em> 包含 `r`n 时如果指定星号可以改善性能因为程序不需要扫描 <em>Text</em> 检查其中是否包含 `r`n.</p>
    <p><strong><a name="stdout"></a>标准输出 (stdout)</strong>: 在 <em>Filename</em> 参数中指定星号 (*) 可以把 <em>Text</em> 发送到标准输出 (stdout). 这样的文本可以重定向到文件, 指向另一个 EXE 的管道或被 <a href="_ErrorStdOut.htm">高级文本编辑器</a> 捕获. 例如, 在命令提示符中输入后面的例子将是有效的:<br>
      "%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" &gt;"Error Log.txt"</p>
    <p>然而, 发送到标准输出的文本将不会出现在运行它的命令提示符中. 解决此问题的方法是把脚本的输出通过管道传递给另一个命令或程序. 例如:<br>
      1) "%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" |more<br>
      2) For /F "tokens=*" %L in ('""%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script .ahk""') do @Echo %L<br>
  </tr>
  <tr>
    <td>编码</td>
    <td><span class="ver">[AHK_L 42+]:</span> 覆盖 <a href="FileEncoding.htm">FileEncoding</a> 包含的默认设置, 其中 <em>Encoding</em> 遵循相同的格式.</td>
  </tr>
</table>

<h3>返回值</h3>
<p>如果出现错误 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被设置为 1 否则为 0.</p>
<p><a href="../Variables.htm#LastError">A_LastError</a> 被设置为操作系统 GetLastError() 函数返回的结果.</p>

<h3>备注</h3>
<p>要覆盖现有的文件, 在使用 FileAppend 前用 <a href="FileDelete.htm">FileDelete</a> 删除它.</p>
<p>追加文本后目标文件自动关闭 (除非在 <a href="LoopReadFile.htm">文件读取/写入循环</a> 中以单参数模式使用 FileAppend 时).</p>
<p><span class="ver">[AHK_L 42+]:</span> 追加模式的 <a href="FileOpen.htm">FileOpen()</a> 比 FileAppend 提供了更多的控制性并且允许文件保持打开而不是每次打开关闭文件. 一旦文件打开后, 可以使用 <code>file.<a href="../objects/File.htm#Write">Write</a>(string)</code> 来追加字符串. 通过 <a href="../objects/File.htm#RawWrite">RawWrite</a>/<a href="../objects/File.htm#RawRead">RawRead</a> 文件对象也支持二进制 I/O, 然而 FileAppend 仅支持文本.</p>
<h3>相关</h3>
<p><a href="FileOpen.htm">FileOpen</a>/<a href="../objects/File.htm">文件对象</a>, <a href="FileRead.htm">FileRead</a>, <a href="LoopReadFile.htm">文件读取循环</a>, <a href="FileReadLine.htm">FileReadLine</a>, <a href="IniWrite.htm">IniWrite</a>, <a href="FileDelete.htm">FileDelete</a>, <a href="OutputDebug.htm">OutputDebug</a>, <a href="../Scripts.htm#continuation">字串分段</a></p>
<h3>示例</h3>
<pre class="NoIndent">FileAppend, Another line.`n, C:\My Documents\Test.txt

<em>; The following example uses a <a href="../Scripts.htm#continuation">continuation section</a> to enhance readability and maintainability:</em>
FileAppend, ( A line of text. By default, the hard carriage return (Enter) between the previous line and this one will be written to the file. This line is indented with a tab; by default, that tab will also be written to the file. Variable references such as %Var% are expanded by default. ), C:\My File.txt</pre>
<p>&nbsp;</p>
<pre class="NoIndent"><a name="FTP"></a><em>; The following example demonstrates how to automate FTP uploading using the operating ; system's built-in FTP command. This script has been tested on Windows XP and 98se.</em>

FTPCommandFile = %A_ScriptDir%\FTPCommands.txt FTPLogFile = %A_ScriptDir%\FTPLog.txt FileDelete %FTPCommandFile% <em>; In case previous run was terminated prematurely.</em>

FileAppend, <em>; The comma is required in this case.</em>
( open host.domain.com username password binary cd htdocs put %VarContainingNameOfTargetFile% delete SomeOtherFile.htm rename OldFileName.htm NewFileName.htm ls -l quit ), %FTPCommandFile% RunWait %comspec% /c ftp.exe -s:"%FTPCommandFile%" &gt;"%FTPLogFile%" FileDelete %FTPCommandFile% <em>; Delete for security reasons.</em>
Run %FTPLogFile% <em>; Display the log for review.</em></pre>

</body>
</html>
